home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / aminet / amoslist0993.lzh / AMOSLIST2 / 000071_amos-request@svcs1.digex.net_Thu Sep 2 22:29:16 1993.msg < prev    next >
Internet Message Format  |  1993-09-03  |  9KB

  1. Received: from nextsun.INS.CWRU.Edu by access.digex.net with SMTP id AA03343
  2.   (5.65c/IDA-1.4.4 for <mcox@access.digex.com>); Thu, 2 Sep 1993 22:29:13 -0400
  3. Received: from svcs1.digex.net by nextsun.INS.CWRU.Edu with SMTP (5.65b+ida+/CWRU-1.5.2-freenet-gw)
  4.     id AA25093; Thu, 2 Sep 93 22:28:48 -0400 (from amos-request@svcs1.digex.net for mcox@access.digex.com)
  5. Received: by svcs1.digex.net id AA27849
  6.   (5.65c/IDA-1.4.4 for amos-list-out); Thu, 2 Sep 1993 22:15:58 -0400
  7. Received: from access.digex.net by svcs1.digex.net with SMTP id AA27845
  8.   (5.65c/IDA-1.4.4 for <amos-list@svcs1.digex.net>); Thu, 2 Sep 1993 22:15:56 -0400
  9. Received: from vax.mbhs.edu by access.digex.net with SMTP id AA02109
  10.   (5.65c/IDA-1.4.4 for <amos-list@access.digex.net>); Thu, 2 Sep 1993 22:15:45 -0400
  11. Message-Id: <199309030215.AA02109@access.digex.net>
  12. Date: 2 Sep 93 22:05:00 EST
  13. From: "Andrew Church" <95ACHURCH@vax.mbhs.edu>
  14. Subject: Screen Flickering
  15. To: "amos-list" <amos-list@access.digex.net>
  16. Status: O
  17.  
  18.   This is another multi-reply message.  (Don't worry, no dinosaurs.)
  19.  
  20. >>  Or have XOFS and YOFS variables, and a _WAIT_VBL procedure that does the
  21. >>Screen Offset right after the Wait Vbl.  This is similar to what I do in a C
  22. >>program I have that needs to scroll a screen around, except I use the Vbl
  23. >>interrupt.  I still get a bit of flicker, but little enough that I don't
  24. >>worry abot it.
  25. >
  26. >What is an XOFS or a YOFS?
  27.  
  28.   X OFfSet and Y OFfSet - internal screen location variables, equivalent to
  29. the parameters to Screen Offset.
  30.  
  31. >Theoretically, to move a screen around, I should be able to double buffer - and
  32. >update the nondisplayed screen at my convenience. At or during VBL I should be
  33. >able to swap screens (presumably just change a pointer somewhere) VERY QUICKLY.
  34. >
  35. >I would be supprised to get ANY flicker - perhaps it would indicate that I am
  36. >trying to do too much or too many things after the start of VBL.
  37. >
  38. >Do you NEED to Screen Offset just after Wait Vbl only because you are not
  39. >double buffering?
  40.  
  41.   That's right... I don't double-buffer, because I found that the extra
  42. updating took too long.
  43.  
  44. >>  It doesn't really matter whether you do Wait Vbl or Screen Swap first, as
  45. >>long as you have them both (or you have some other way to make sure you only
  46. >>do one Screen Swap per Vbl).
  47. >
  48. >Ok! This is useful information!
  49.  
  50.   No, it's not.  Everybody else was right -- it has to be before the vertical
  51. blank.  Stupid me.
  52.  
  53. >So screen swap really means, "Swap Screen AT next VBL". (Or is that DURING, 
  54. >or AFTER?)
  55.  
  56.   "Swap Screen AT next VBL".
  57.  
  58. >You might like to fill me in on the low level mechanism of the graphics/copper
  59. >stuff.
  60.  
  61.   Well, seeing as someone else already has, I won't bother.
  62.  
  63. >And anyhow: How do you know these things? Have you looked at the AMOS source?
  64. >Is this just conjecture as to how it should be done? How you would do it? The
  65. >only way possible?
  66. ><fx: no offence! Just checking your credentials!>
  67.  
  68.   Well, I don't know for sure, but it is the most sensible way to do it.
  69. They could also have a separate task that gets a signal after a Screen
  70. Swap, modifies the copper list, and returns to AMOS, but that's the long
  71. way (or at least, *a* long way).
  72.  
  73. >As far as I know, the correct order is
  74. >
  75. >     Do
  76. >    ... your drawing ...
  77. >    Screen Swap
  78. >    Wait Vbl
  79. >     Loop
  80.  
  81.   That it is.
  82.  
  83. >I've always used this for flicker-free drawing, and the majority of other
  84. >programs I have seen do as well.  The Screen Swap command simply exchanges
  85. >the copper list pointers for the physical and logical screens.  The copper
  86. >is already executing the list for the current physical screen, so you don't
  87. >actually interrupt the display at the exact instant you call Screen Swap:
  88. >the change only happens at the start of the next frame.  However, drawing
  89. >commands are immediately affected - they are directed to the current logical
  90. >screen.  So if you do a screen swap, then draw immediately, your display
  91. >will flicker like a bastard, since your logical screen is halfway through
  92. >being displayed!  If you follow your Screen Swap with a Wait Vbl, you wait
  93. >until the current display is finished.  Then the copper pointer is updated
  94. >from your new physical screen and your logical screen flips to the back, and
  95. >you can start drawing over again.
  96.  
  97.   Good point, forgot about that.  You could use the Physic() function to
  98. return the "physical" screen number (which is still not displayed until the
  99. vertical blank).
  100.  
  101. >> In fact, it sounds CRUCIAL to have the Screen Swap BEFORE the Wait Vbl.
  102. >
  103. >It is.  I can't see how having them the other way round can get useful
  104. >results, though I expect it could be good for something.  Winning the
  105. >"flicker of the century award" perhaps? :)
  106.  
  107.   Naah... try a loop in which your program draws stuff, then does Screen
  108. Offset inthe middle of the display.  My RPG (in C) did that... it was rather
  109. interesting to be seeing two separate parts of the display at once.  :-)
  110.  
  111. >Screen swap is just a change of pointers... I haven't looked in screen base
  112. >but assume they're there..
  113.  
  114.   Yup.  The first 6 longwords are the current (logical) bitplane pointers,
  115. or just THE bitplane pointers for a single-buffered screen.  If the screen
  116. is double-buffered, the next 6 longwords are the pointers to one screen, and
  117. the 6 after that are the pointers to the other screen.  (If AMOS starts to
  118. support AGA, all this will change, of course...)
  119.  
  120. >>   If you have a Shell window open, Close Workbench will *NOT* work.  This is
  121. >> because the Shell is a window on the Workbench screen that is not part of
  122. >> Workbench itself.  Intuition cannot force "visitor" windows to close, so it
  123. >> cannot close Workbench.
  124. >
  125. >If this is true then I should still see the Workbench screen etc. if I
  126. >push Amiga-A, correct??   When I do this I see nothing, just a blank blue
  127. >screen which indicates to me that it has worked.
  128.  
  129.   As somebody mentioned, AMOS doesn't always load the copper list correctly
  130. when switching to Workbench.  Does this happen all the time, though?  If so,
  131. then it sounds like something's wrong.
  132.  
  133.   An extract from the 1.3 Includes & Autodocs RKM:
  134.  
  135. +++     This routine attempts to close the Workbench.  The actions taken are:
  136. +++   -   Test whether or not any applications have opened Windows on the
  137. +++       Workbench, and return FALSE if so.
  138.  
  139. >    The manual does say it should be Screen Swap then Wait Vbl.  If
  140. >the Screen Swap is meant to occur just after the next Vblank then why do
  141. >you need a Wait Vbl at all??  If you leave out the Wait Vbl's then 9 times
  142. >out of 10 the flickering is worse (As I found in the game I am now writing).
  143.  
  144.   See above.  You'll be drawing into the currently displayed screen.
  145.  
  146. >    I haven't actually examined the code lately but I may have used
  147. >Screen Copy instead of Scroll.  This could be the problem as Screen Copy
  148. >is slower (I think thats right I can't remember correctly,  but I do know
  149. >that after my tests on this I do now use scroll).
  150.  
  151.   They should be about the same.  Both involve copying blocks of memory.
  152. Scroll may be a bit faster if it calculates the stuff it needs to (blitter
  153. registers, etc.) when you do a Def Scroll, but that kind of difference
  154. shouldn't be noticeable.
  155.  
  156. >    With reguards to the timing of the flicker I don't know that this
  157. >is totally valid.  It does show that when it occurs it is fairly constant
  158. >but in my experience the flicker does not always happen.  I have had the
  159. >program run before with no flickers,  which just doesn't seem correct.
  160.  
  161.   See if it has anything to do with the status of the Workbench.  I had a
  162. program that slowed down for apparently no reason if my Workbench was
  163. interlaced.
  164.  
  165. >>    The only reason this would be needed is just incase the drawing
  166. >>etc. takes less than 1/2 a second and that once the screenswap has been
  167. >>called the program continues with the next update.  But in theory this
  168. >>should just create a que of future screen swaps at future Vblanks.
  169. >
  170. >PAL is a 50Hz update, I think. Screens would be swapped every 1/50th of a sec.
  171.  
  172.   Yes.  Also, doing a queue of Screen Swaps, if your update is faster than
  173. 1/50th of a second, would cause the user's input to be wrong, as the user
  174. would be seeing old display data.  (Or something like that...)
  175.  
  176. >And I think that it if you did two Screen Swaps, the same physical screen would
  177. >be redrawn next time.
  178.  
  179.   Yup.
  180.  
  181. --------
  182.   (phew...)
  183.  
  184.   Has anyone else noticed that the volume on this list is incredibly high all
  185. of a sudden?  :-)
  186.  
  187.   --Andy Church
  188.